package cn.larry;

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import cn.larry.bean.OneBean;
import cn.larry.bean.postprocessor.MyBeanPostProcessor1;
import cn.larry.bean.postprocessor.MyBeanPostProcessor2;

/**
 * @author LarryZeal
 *
 */
@Configuration
public class TheConfiguration {

	// bean post processor的执行顺序与这里的位置有关。靠上的位置先执行。@Order没用。
	// 这种bean（post-processor）应该是static @Bean method。
	// 而且不是对称的那种，这个bean中的两个方法的执行都早于下个bean中的对应的方法。
	@Bean
	@Profile({ "postprocessor2" })
	public static BeanPostProcessor myBeanPostProcessor2() {
		return new MyBeanPostProcessor2();
	}

	@Bean
	@Profile({ "postprocessor1" })
	public static BeanPostProcessor myBeanPostProcessor1() {
		return new MyBeanPostProcessor1();
	}

	@Bean(initMethod = "init")
	public OneBean bean() {
		OneBean demo = new OneBean();
		return demo;
	}

}
